package com.yycx.msg.provider.service;

import com.yycx.common.base.entity.EntityMap;
import com.yycx.common.mybatis.model.ResultBody;
import com.yycx.msg.client.entity.MsgReceive;
import com.yycx.common.mybatis.base.service.IBaseService;

import java.io.Serializable;
import java.util.List;

/**
 * 消息接收表 接口
 *
 * @author flyme
 * @date 2020-02-28
 */
public interface MsgReceiveService extends IBaseService<MsgReceive> {
    /**
     * 删除用户消息
     *
     * @param msgIds
     * @return
     */
    Boolean deleteByMsgId(Serializable[] msgIds);


    /**
     * 统计用户未读信息数量
     *
     * @return
     */
    Long countNoRead();

    /**
     * 根据类型获取用户未读信息
     *
     * @param userId
     * @param typeCode
     * @return
     */
    List<EntityMap> selectNoReadMessage(Long userId, String typeCode);

    /**
     * 根据类型获取用户最新未读信息
     *
     * @param userId
     * @param typeCode
     * @return
     */
    EntityMap selectLastNoReadMessage(Long userId, String typeCode);

    /**
     * 根据类型获取统计用户未读信息
     *
     * @param typeCode
     * @return
     */
    Integer countNoReadMessage(String typeCode);

    /**
     * 根据类型获取统计用户未读信息
     *
     * @param msgTypeId
     * @return
     */
    Integer countNoReadMessage(Long msgTypeId);


    /**
     * 返回全部类型未读消息数量
     *
     * @param userId
     * @return
     */
    ResultBody getAllNoReadMessageNum(Long userId);


    /**
     * 查询后台首页未读消息
     *
     * @return
     */
    List<EntityMap> getNoticeList();


    /**
     * 一键已读
     */
    void updateAllReadState();

    /**
     * 清空已读
     */
    void deleteAllRead();


    /**
     * 发送消息通知
     *
     * @param typeCode      消息类型
     * @param receiveUserId 接收人
     * @param msgTitle      消息标题
     * @param content       消息内容
     * @return
     */
    MsgReceive sendMsgReceiveNotice(String typeCode, Long receiveUserId, String msgTitle, String content);
}
